\chapter{Grabber Editor : Module de gestion du fichier Grabber}\label{ch:grabber}

%\section
%\subsection
%\subsubsection
%\paragraph{Import à partir d'un fichier}



Le fichier de configuration du grabber ressemble à \ref{grab_example}, soit des couples de clef/objet.

\begin{lstlisting}[label=grab_example,caption=Example de fichier de configuration du Grabber]
PFS="CDN"
SRV_TYPE="PCDNSG"
SRV_LIST="10.104.73.131:P1CDNSG1 10.104.73.132:P1CDNSG2"

SRC="/usr/vds/vsg/logs/vsg.log"
SRC_DATE="/usr/vds/vsg/logs/vsg.log.$(date -d "$CUSTOM_DATE" +%Y-%m-%d).gz"
LOG_TYPE="vsg"
MODE="REAL TIME"

FREQUENCY=15
PATTERN="(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}),"
PATTERNMATCH="$DAY=$3;$MONTH=$2;$YEAR=$1;$HOUR=$4;$MIN=$5;$SEC=$6;"
SCHEDULER="TRUE"
AGGREGATOR="TRUE"
\end{lstlisting}
 
\section{WizardAction}

\textit{WizardAction} est la classe centrale de notre application Grabber. Elle concentre les différentes fonction liés aux éléments non dynamique de notre page tel que la liste des fichiers de grabber déjà existants, initialiser la liste des modèles de récupération, \ldots

Elle permet aussi de sauvegarder notre objet courant grabber au travers des différentes pages qui compose l'assistant. Celui-ci est sauvegarder au sein de la pile des variables de sessions entièrement gérée par Struts. A noter, de ce fait ouvrir plusieurs onglets de notre application amène certains comportements non-intuitifs et est donc vivement déconseillé.

\textit{WizardAction} implémente également la gestion des tables \textit{dim\_\_pfs}, \textit{dim\_\_srv\_type} et \textit{dim\_\_srv}. L'objectif de ces tables est de référencer l'ensemble des serveurs utilisés pour pouvoir faire des propositions à l'utilisateur. Ces tables sont remplies lorsque l'utilisateur remplit les textbox correspondantes au lieu de sélectionner un élément existant de la liste.
L'objet \textit{SqlManager} gère justement l'ensemble de ces 3 tables, en lecture et écriture, grâce aux méthodes de PreparedStatement de Java (attention : au \today\xspace ces tables n'étaient créées que sur la base newtv\_dev).

\section{Mode d'extraction}

Les modes d'extraction permettent de spécifier des méthodes d'accès aux fichiers de logs différentes, les 2 principaux (qui ont été implémentés) sont \textit{ScheduledMode} et \textit{RealTimeMode}. En fonction de chaque mode, les paramètres varient, l'ensemble des méthodes doit donc être implémentés dans cet objectif.

\subsection{Ajouter un nouveau mode d'extraction}

Dans le cas où l'on souhaite ajouter un nouveau mode d'extraction il est nécessaire d'implémenter l'interface \textit{ExtractMode} et ses méthodes :
\begin{itemize}
	\item{\textit{loadFromFile}} permet la lecture d'un fichier déjà existant et l'on devra implémenter les différents attributs qui peuvent être analysés par ce mode.
	\item{\textit{toConFile}} permet l'écriture de notre mode d'extraction dans le fichier de configuration final.
	\item{\textit{getHtmlContent}} gère l'affichage de notre mode et les différents bindings entre les input web et nos attributs.
\end{itemize}

Enfin, il faut ajouter un nouvel objet de cette classe au sein de la méthode \textit{initListModel} de \textit{WizardAction}.

\section{Grabber}

Cette classe permet simplement de conserver et centraliser l'ensemble des paramètres génériques aux fichier de grabber, tout en offrant les méthodes de lecture et de l'écriture appropriées.

\begin{figure}
\centering
\includegraphics[scale=0.55]{../img/grabberUml.jpg}
\caption{Diagramme de classe du l'outil Grabber}
\label{grabUml}
\end{figure}